perm filename SUPDUP.GRF[NET,MRC] blob
sn#309977 filedate 1977-10-07 generic text, type C, neo UTF8
COMMENT ⊗ VALID 00008 PAGES
C REC PAGE DESCRIPTION
C00001 00001
C00002 00002 This mailing list includes:
C00003 00003 JLK@MIT-MC 10/06/77 09:21:25
C00007 00004 MOON@MIT-MC 10/06/77 17:19:50 Re: graphics
C00011 00005 JLK@MIT-MC 10/06/77 18:37:23
C00017 00006 CFFK@MIT-MC 10/06/77 20:32:52 Re: Graphics protocol: +y should be up, not down
C00018 00007 RMS@MIT-AI 10/07/77 00:10:13
C00024 00008 BEE@MIT-MC 10/07/77 08:25:20
C00027 ENDMK
C⊗;
This mailing list includes:
JLK at MIT-MC, MOON at MIT-MC, MRC at MIT-MC, BEE at MIT-MC
CFFK at MIT-MC, MACRAK at MIT-MC, RMS at MIT-AI
(FILE [MC:JLK;.TDGRF MAIL]) at MIT-MC
JLK@MIT-MC 10/06/77 09:21:25
I heard about your SUPDUP protocol, and it got me thinking that it would
really be a win if such a thing existed for graphics as well. Now I am
aware of that network graphics protocol study which didn't seem to go
anywhere. One of the problems is that unlike SUPDUP there is almost zero
experience with using graphics over the net. Another one is that whenever
anyone starts thinking about this, all kinds of complicated issues like
display subroutining and the like get raised, when in fact the vast
majority of hosts and users only have simple line drawing graphics
hardware and software. The jist of all this is that it would be nice if
the SUPDUP protocol were extended for simple line drawing primitives (we
have been using 200+ards codes for this on our software tty terminals -
i.e. 234,235,236,237 are used for setpoint, long vector, short vector, and
exit graphics mode). Moon has pointed out that ARDS codes are not very
optimal, but no one has yet suggested a line drawing protocol which is
much of an improvement. The most universal line drawing protocol
(Tektronix) is even more losing. An additional command pair which we feel
would be very useful for cleaning things up is a general enter and exit
graphics mode that would allow you to distinguish characters displayed as
part of a graph from those treated as part of the display screen (for
cursorpositioning). We even implement this protocol for character only
displays (printing or otherwise) in our PDP-11 (now it is not a great win
but you can get a reasonable approximation).
Now a point could be made that one wants to keep the SUPDUP protocol
simple and unkludged by such extensions. On the other hand there is a lot
of useful linedrawing type software available that could be used over the
net (and very little software that uses more complicated graphics
constructs like the DRAW program), so it would be nice if there was a way
to sidestep the delay necessary in arriving at a general graphics protocol
(based on zero experience). Another alternative is to experiment with a
line drawing protocol on ITS/SAIL to gain some experience before
suggesting a standard.
(I just thought I'd throw these ideas in the pot to boil...)
MOON@MIT-MC 10/06/77 17:19:50 Re: graphics
It's not really MRC's protocol, he was just the only one together enough
to sit down and document it. Also, it's not really a separate protocol,
since it's closely tied to ITS. Yes, I would like to see some
line-drawing protocol. Now that I've seen Tektronix I have to agree it's
more losing. Maybe we should just bite the bullet and use ARDS code.
Except, maybe it would be better to flush the strange shifting, and I
doubt that most people use or support dotted lines.
How about the following? If there's anything wrong with this tell me.
Then we can go ahead and define the characters in the system's %TD
codespace; we don't have to implement anything right away.
This assumes that the codes 000 and 177 are not difficult to send.
Coordinate system:
<dx>, <dy> deltas. 100 bit is sign (0=down/right, 1=up/left)
77 bits are the magnitude.
<x>, <y> 14-bit absolute coordinates. The actual screen
size is device-dependent. The high 7 bits
are sent first.
Character codes:
%TDGRF <x> <y> - enter graphics mode and set position to (x,y)
if already in graphics mode, just set position.
%TDGRX - exit graphics mode. Must be followed by a %TDMV0,
or could take <row>,<col> args like %TDMV0.
The terminal is not assumed to be able to
remember the cursor position of one mode
when in the other mode.
%TDLIN <x> <y> - draw a line from current position to (x,y)
and move the cursor to (x,y).
%TDVEC <dx> <dy> - similar but relative short vector, is
this necessary?
%TDIVC <dx> <dy> - invisible vector. If %TDVEC exists this
should also.
%TDORS (output reset) should take the terminal out of graphics mode.
Conceivably these might be implemented on the AI TVs, although it wouldn't
be high-priority. I'm not sure, but I think the SAIL TVs are not capable
of reasonable line-drawing.
JLK@MIT-MC 10/06/77 18:37:23
(Is it likely this discussion is going to persist long enough to require a
mailing list?)
(1) Should ITS support the interpretation of this protocol for various
terminal types? (I know RMS is not in favor of this, but I'm not sure
what the issues are. In fact the only dumb terminal that cannot interpret
this protocol is a tektronix. Imlacs, TV's etc. could easily interpret
it. What about frobs like the new HP graphics terminal? As I mentioned, we
actually support the ards convention for non-graphics terminals by
converting to character plots. Is this enough of a win to pursue?)
(2) What are the advantages of this sign/magnitude format rather than
simply 2's complement? Vector displays like plotters and IMLACS like this
form, but TV's would rather have 2's complement. Somehow 2's complement
seems esthetically nicer.
(3) Relative vectors of some sort are definitely necessary for some
applications, but I suspect your TDLIN primitive would be the most
commonly used one. It seems to me that in most cases where relative
vectors are used, they are used locally (in a small region) so I agree
with only having small relative vectors (after all it only takes a few
ADD's to turn relative vectors into absolute ones).
(4) ARDS format uses the command character as a way of entering things
like Long Vector MODE (i.e. every 4 chars are taken as a long vector, with
no requirement that the command character be repeated). I suppose this is
more efficient over slow communication links, but is also less reliable.
Do you propose to prefix each vector by the appropriate %TD code? I think
I would prefer this.
(5) MACRAK points out there should be an agreed upon convention for how
rounding of the 14-bits, down to whatever the terminal can support, should
be done (so circles come out as circles! - this exists informally for our
TV's although I forget what the rule is).
(6) I generally like the %TDGRF and %TDGRX. Terminals often would like to
distinguish characters output in graphics mode vs ordinary display mode
(to put them in different display lists, etc.). If you exit graphics mode
with %TDORS, where is the cursor supposed to be? If ITS supports the
convention for some terminal then it would have to know how to convert
between character and vector coordinates for that terminal, requiring
information such as character size in graphic units, etc (a pain..)
(7) It would be pretty easy to implement this on our PDP-11 and SIMLAC,
and to change the MACSYMA graphics package to use it. If a consensus is
reached on this, I would like to do this so we could gain some experience
with the protocol (or should we just assume we know what we're doing...)
It would be win if AI TV's and SUPDUP knew about it too so the user
community could be expanded. Should we solicit some input from DM?
What graphics programs are widely used on ITS's (other than programs that
run in terminals themselves)? I know of MACSYMA, MUDDLE, DRAW, GEOMED,
(programs for printing ards pictures - ARDPRN, IMPRNT or whatever). On AI
TV's there is LOGO and some stuff on TVLISP, and various individual's
hacks. Others? (I am just curious to see the range of things this
protocol might apply to).
Then there is the issue of how to store these guys on disk (8-bit bytes
packed?) - we currently use ards or arrays of floating pt numbers.
CFFK@MIT-MC 10/06/77 20:32:52 Re: Graphics protocol: +y should be up, not down
The coordinate system for graphics should have the positive directions
being UP and right. This is what Tektronix and Ards graphics assume, and
conforms more closely to peoples assumptions of how a piece of graph paper
should look.
RMS@MIT-AI 10/07/77 00:10:13
1) I never was opposed to a system-wide graphics protocol. In fact, I
have wanted one for some time.
2) I do not think that individual graphics functions should have their own
%TD codes. Doing it that way is unnecessary, since I do not believe that
ITS itself will ever play any part in supporting them, and will make it
more difficult, slow and frightening to define new graphics codes. (But
it won't be impossible to make ITS support them, for some rigid terminal,
if we must).
3) That is important because I think that we should have a lot more
operations than were proposed. There should be operations to draw shaded
or unshaded circles, squares, triangles, etc, operations to draw
characters or specified radius dots at graphics cursor positions,
operations that name or refer back to objects so that display list
terminals can win, and ways to set the ALU function so TVs can win. There
should be ERASE commands that give an object number and are also followed
by commands to redraw the object, so that both display list terminals and
raster terminals can succeed in erasing the object. And there should be
any other commands that it proves useful to put in the user end instead of
the server.
4) All that is needed in ITS is a central way to remember what
capabilities the terminal has. A new system variable is already being put
in, to hold such information.
5) So I advocate creating a special "graphics" mode which can be entered
and exited by some sort of user command (a ∧P code?). The entry and exit
will be represented in the buffer by %TDGRP and %TDGRX codes. The actual
graphics protocol need not be known in any way to ITS; it will consist of
a way of interpreting characters sent while in graphics mode. This makes
that protocol easy to change.
6) Robustness: The reason for having ITS know about graphics mode at all
is that we can then make it perform a few services, such as not allow any
other job to type out (ie, a job outputting in graphics mode essentially
locks the terminal, even though other jobs may also have output
permission). If the job LOSES output permission (eg, because it has been
∧Z'd) then other programs are again allowed to type out on it, and if one
does then a %TDGRX must be sent first. .RESET should turn off ITS's
graphics mode bit. The %TDORS should inform the terminal that it is no
longer in graphics mode. ITS will start up with no terminal in graphics
mode, so %TDINI should inform the terminal that it is not in graphics
mode. This implies that the graphics protocol must not make use of %TDGRX
or %TDORS or %TDINI EVER, even as an argument. I think it might be best
to restrict the graphics protocol to codes less than 128. Note that
rubout will still be turned into Rubout ∧A for hardware software TTYs,
which most graphics terminals will presumably be.
7) Other similar services: Many other applications will be able to use
this locking/resetting property. For example, sending who-lines to IMLACs
can lose if DDT types out in the middle. Sending debugging commands and
programs to be loaded are two more examples. I think that such operations
should be defined as subsets of the graphics protocol. An alternative
might be a new %TD code for each such class of operations, to enter a mode
that as far as ITS knows is just like graphics mode, but might be used
differently by user programs and terminals.
8) Another advantage of this scheme is that it does not require that the
terminal be open in super-image output mode. It can be used just fine
with an ordinary output channel.
BEE@MIT-MC 10/07/77 08:25:20
1) No comment.
2) I agree for basically the same reason
3) This I think is a good idea, however with this stipulation. I think
that RMS has gone a little overboard, and would be somewhat upset if we
spent all the time deciding what the shading commands should look like. I
think that a better way to approach this whole problem is to just design a
simple protocol. This protocol should only support line drawing at the
start. It however should have a lot of "opcode" space that is not used.
These should be made available for user specification. Basically when a
command becomes used by several programs, it should get assigned an
opcode. I think that it would be self defeating to try and decide now all
the commands that are needed. Having some graphics experience previously,
I think that it is not important to make the hairy commands particularly
efficient transmissionwise. The important thing is to make the commonly
used ones take the least time. Things that fall into that category are
line drawing and output of characters in graphics mode. A good model for
this kind of scheme are the system calls and uuos of ITS. When a service
is supplied to many programs, the code is centralized and a convetion is
set. If it is just a command that one user or program wants to implement,
it is free to use one of the free slots. As for circles and shading, I
dont think that this is particularly useful to put in the protocol.
4-6) Like I said before, having ITS not know a whole lot is a win, but
some features are important.
7-8) This is also a win, if it isn't too hard.